package fr.charlott.view;

import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import fr.charlott.business.dto.PersonneDTO;
import fr.charlott.business.dto.SaisonDTO;
import fr.charlott.business.service.PersonneService;
import fr.charlott.business.service.SaisonService;
import fr.charlott.tools.exceptions.FunctionalException;
import fr.charlott.tools.exceptions.TechnicalException;

@Component("nouvelleSaisonControler")
@Scope("view")
public class NouvelleSaisonControler extends CharlottControler {

    private static final long serialVersionUID = -6404906491610002771L;

    public static final String EDITED_SAISON = "editedSaison";

    /**
     * Service
     */
    private SaisonService saisonService;

    private SaisonDTO saison;

    private PersonneDTO selectedPersonne;

    private SaisonDTO saisonCourante;

    public NouvelleSaisonControler() {
        super();
    }

    @Autowired(required = true)
    public NouvelleSaisonControler(SaisonService saisonService, PersonneService personneService, ApplicationControler applicationControler) {
        super();
        this.saisonService = saisonService;
        this.saisonCourante = applicationControler.getSaisonCourante();

        // Recupere la personne selectionnee dans la session
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        saison = (SaisonDTO) externalContext.getSessionMap().get(EDITED_SAISON);

        if (saison == null) {
            saison = new SaisonDTO((short) (saisonCourante.getAnnee() + 1));
            externalContext.getSessionMap().put(EDITED_SAISON, saison);
        }
    }

    // navigation

    public String ajouterSaison() throws TechnicalException, FunctionalException {
        try {
            saisonService.ajouterSaison(saison);
            cleanSession(EDITED_SAISON);
            return "gestionSaisons";
        } catch (TechnicalException e) {
            FacesMessage msg = new FacesMessage("Error", e.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return null;
        }
    }

    public String annuler() {
        cleanSession(EDITED_SAISON);
        return "gestionSaisons";
    }

    // getters / setters

    public SaisonDTO getSaison() {
        return saison;
    }

    public PersonneDTO getSelectedParent() {
        return selectedPersonne;
    }

    public PersonneDTO getSelectedPersonne() {
        return selectedPersonne;
    }

    public void setSelectedPersonne(PersonneDTO selectedPersonne) {
        this.selectedPersonne = selectedPersonne;
    }

}